#!/bin/bash

# MySQL备份脚本-

# 配置信息
USER="root"
PASSWORD="Hqks@2023"
HOST="192.168.1.32"

BACK_NAME="32"
BACKUP_DIR="/mnt/d/BACKUP_FILES/DB/mysql_${BACK_NAME}"
TMP_DIR="/mnt/d/BACKUP_FILES/DB/mysql_${BACK_NAME}_backup_$DATE"  # 临时目录
DATE=$(date +%Y%m%d_%H%M%S)
ARCHIVE_FILE="$BACKUP_DIR/${BACK_NAME}_mysql_backup_${DATE}.tar.gz" #打包目录


# 确保备份目录存在
mkdir -p "$BACKUP_DIR"
mkdir -p "$TMP_DIR"

# 获取所有数据库名称
databases=$(mysql -u "$USER" -p"$PASSWORD" -h "$HOST" -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql|sys)")

# 为每个数据库创建备份
for db in $databases; do
    echo "正在备份数据库: $db"
    backup_file="$TMP_DIR/${db}_${DATE}.sql"
    
    # 使用mysqldump备份数据库
    mysqldump --opt -u "$USER" -p"$PASSWORD" -h "$HOST" --set-gtid-purged=OFF "$db"  > "$backup_file"
    
    # 检查备份是否成功
    if [ $? -eq 0 ]; then
        echo "数据库 $db 备份成功，文件: $backup_file"
        
        # 可选：压缩备份文件
        #gzip "$backup_file"
        echo "备份文件已压缩为: ${backup_file}.gz"
    else
        echo "错误: 数据库 $db 备份失败"
    fi
done


#打包

echo "正在打包所有备份文件到: $ARCHIVE_FILE"

if [ -n "$(ls -A $TMP_DIR 2>/dev/null)" ]; then
    tar -vczf "$ARCHIVE_FILE" -C "$TMP_DIR" .
    if [ $? -eq 0 ]; then
        echo "备份文件打包成功"
    else
        echo "错误: 备份文件打包失败"
    fi
else
    echo "没有找到需要打包的备份文件"
fi

# 删除临时目录
rm -rf "$TMP_DIR"

find $BACKUP_DIR -mtime +20 -exec rm -Rf {} \;

echo "所有数据库备份完成!"    